package cn.edu.ctbu.scoremg.service;

import cn.edu.ctbu.scoremg.constant.REnum;
import cn.edu.ctbu.scoremg.dao.ScoreRepository;
import cn.edu.ctbu.scoremg.entity.Score;
import cn.edu.ctbu.scoremg.exception.RException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ScoreService {

    @Autowired
    private ScoreRepository scoreRepository;

    public List<Score> getAll() {
        return scoreRepository.findAll();
    }

    public Page<Score> getAll(Pageable pageable) {
        return scoreRepository.findAll(pageable);
    }

    public Page<Score> getAll(Example<Score> example, Pageable pageable) {
        return scoreRepository.findAll(example, pageable);
    }

    /**
     * 按id查询成绩
     * @param id 成绩ID
     * @return 成绩对象
     */
    public Score findById(String id) {
        return scoreRepository.findById(id).orElse(null);
    }

    /**
     * 按学号查询成绩
     * @param sno 学号
     * @return 成绩列表
     */
    public List<Score> findBySno(String sno) {
        return scoreRepository.findBySno(sno);
    }

    /**
     * 按课程名称查询成绩
     * @param cname 课程名称
     * @return 成绩列表
     */
    public List<Score> findByCname(String cname) {
        return scoreRepository.findByCname(cname);
    }

    /**
     * 按学号和课程名称查询成绩
     * @param sno 学号
     * @param cname 课程名称
     * @return 成绩列表
     */
    public List<Score> findBySnoAndCname(String sno, String cname) {
        return scoreRepository.findBySnoAndCname(sno, cname);
    }

    /**
     * 新增成绩
     * @param score 成绩对象
     * @return 保存后的成绩对象
     */
    public Score add(Score score) {
        return scoreRepository.save(score);
    }

    /**
     * 更新成绩
     * @param score 成绩对象
     * @return 更新后的成绩对象
     */
    public Score update(Score score) {
        return scoreRepository.save(score);
    }

    /**
     * 删除成绩
     * @param id 成绩ID
     */
    public void delete(String id) {
        scoreRepository.deleteById(id);
    }

    /**
     * 批量删除成绩
     * @param ids 成绩ID列表
     */
    public void deleteBatch(List<String> ids) {
        scoreRepository.deleteAllById(ids);
    }

    /**
     * 按学生姓名查询成绩
     * @param sname 学生姓名
     * @return 成绩列表
     */
    public List<Score> findBySname(String sname) {
        return scoreRepository.findBySname(sname);
    }

    /**
     * 按分数范围查询成绩
     * @param minScore 最低分
     * @param maxScore 最高分
     * @return 成绩列表
     */
    public List<Score> findByScoreBetween(Integer minScore, Integer maxScore) {
        return scoreRepository.findByScoreBetween(minScore, maxScore);
    }
}